# 本周作业来袭了各位小伙伴：
# 本周作业内容如下（3.2-3.15）
# 编写一个学生管理系统类 ---Gradebook:
# 要求能动态的添加学生-name和学生成绩 grades(一个学生可以有个多科的科目成绩)，并且根据学生名字能算出学生的平均成绩：
# 提示：可以预习初始化一个字典，该实例字典存储相应的信息
# 1 编写一个表示科目的类--Subject，该类包含一系列的考试成绩
# 2.编写一个表示学生的类--Student， 该类包含此学生正在学习的各项课程
# 3,.编写一个包含所有学生考试成绩的容器类--Gradebook，该容易以学生的名字为key，并且可以动态的添加学

gradebookDict = {}

class Subject():

    def __init__(self, subjectName, subjectValue):
        self.subjectName = subjectName
        self.subjectValue = subjectValue


class Student():

    def __init__(self, name):
        self.name = name


class Gradebook():

    def __init__(self, dic):
        self.gradebookDict = dic

    def addStudent(self, st):
        if st.name in self.gradebookDict:
            print("此学生已经录入，不需要重新添加")
        else:
            self.gradebookDict[st.name] = {}

    def addGradeByStudent(self, name, su):
        # 如果是同一个学生的同一个科目则更新成绩
        # 如果是同一个学生新的科目，则为添加
        if name in self.gradebookDict:
            self.gradebookDict[name][su.subjectName] = su.subjectValue
        else:
            # 弹一个excp
            print("没有这个学生")

    def averageGR(self, name):

        averageGrad = 0
        temp = 0
        print(self.gradebookDict)
        stuGradeAll = self.gradebookDict[name]
        # # 字典遍历获得value

        for v in stuGradeAll.values():
            averageGrad += int(v)
            temp += 1

        return averageGrad/temp


if __name__ == "__main__":

    gb = Gradebook(gradebookDict)  # 成绩簿类

    tempbreak1 = "Y"
    tempbreak2 = 'Y'
    tempbreak3 = 'Y'

    while True:
        tempbreak1 = input("是否添加新的学生 是Y，否N")

        if tempbreak1 == 'N':
            break

        name = input("输入想要添加学生的姓名")
        st = Student(name)
        gb.addStudent(st)

    while True:
        if tempbreak2 == "N":
            break

        stn = input("请输入学生姓名")
        subjectName = input("请输入学生的学科名称")
        subjectValue = input('请输入学科的成绩')
        su = Subject(subjectName, subjectValue)
        gb.addGradeByStudent(stn, su)
        tempbreak2 = input("是否要继续添加成绩，是Y，否N")

    while True:
        tempbreak3 = input("是否要获取某学生的平均分数 是Y,否N")
        if tempbreak3 == "N":
            break
        studentName = input('学生的姓名')

        print(gb.averageGR(studentName))

    print(gb.gradebookDict)

# 逻辑上没有啥问题